Liveview handle_async simple exemple
Liveview에서 비동기 렌더링을 위한 handle_async exemple
이렇게 수동 loading을 줄 수도 있고
AsyncResult 랑 <.async_result> 컴포넌트를 사용하는 방법으로도 쓸 수 있다.
def render(assigns) do
~H"""
<header class="h-12">
<%= if @is_room_loading do %>
<.header_contents room={@room} room_name_form={@room_name_form} />
<% end %>
</header>
"""
end
def mount(%{"room_short_id" => room_short_id}, _, socket) do
{:ok,
socket
|> assign(is_room_loading: false)
|> start_async(:get_room, fn -> Settlement.get_room_by_short_id!(room_short_id) end)}
end
def handle_async(:get_room, {:ok, room}, socket) do
{:noreply,
assign(socket,
room: room,
room_name_form:
room
|> AshPhoenix.Form.for_update(:update_name, api: Settlement.Room)
|> to_form(),
is_room_loading: true
)}
end